//package com.rxyb.auth.handler;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.security.access.AccessDecisionVoter;
//import org.springframework.security.access.ConfigAttribute;
//import org.springframework.security.core.Authentication;
//import org.springframework.security.core.GrantedAuthority;
//import org.springframework.security.web.FilterInvocation;
//
//import java.util.Collection;
//
///**
// * 角色权限路由处理
// *
// * @author duyh
// * @date 2020/5/25
// */
//@Slf4j
//public class UrlRoleAuthHandler implements AccessDecisionVoter<Object> {
//    @Override
//    public boolean supports(ConfigAttribute configAttribute) {
//        if (null == configAttribute.getAttribute()) {
//            return false;
//        }
//        return true;
//    }
//
//    @Override
//    public boolean supports(Class<?> aClass) {
//        return true;
//    }
//
//    /**
//     * ACCESS_GRANTED – 同意
//     * ACCESS_DENIED – 拒绝
//     * ACCESS_ABSTAIN – 弃权
//     */
//    @Override
//    public int vote(Authentication authentication, Object object, Collection<ConfigAttribute> collection) {
//        String requestUrl = ((FilterInvocation) object).getRequestUrl();
//        if (null == authentication) {
//            return ACCESS_DENIED;
//        } else if ("/login".equals(requestUrl) || "/logout".equals(requestUrl)) {
//            return ACCESS_GRANTED;
//        }
//
//        int result = ACCESS_ABSTAIN;
//        Collection<? extends GrantedAuthority> userRoles = authentication.getAuthorities();
//        /* 遍历链接中对应的权限 */
//        for (ConfigAttribute urlRole : collection) {
//            if (this.supports(urlRole)) {
//                /* 此处默认值为弃权，表示只要有一个角色对应上，用户就可以访问链接
//                   如果值改为拒绝，表示必须全部角色包含才能访问链接
//                 */
//                result = ACCESS_ABSTAIN;
//                /* 遍历用户中对应的角色列表 */
//                for (GrantedAuthority userRole : userRoles) {
//                    if (urlRole.getAttribute().equals(userRole.getAuthority())) {
//                        log.info("该角色拥有URL权限");
//                        return ACCESS_GRANTED;
//                    }
//                }
//            }
//        }
//        log.info("该角色没有URL权限");
//        return result;
//    }
//}
